package com.szrt.day20170504.ch08;

public class TicketThread implements Runnable {
	/**
	 * 一共有一百张票
	 * 
	 * 100 99 98 ...1 
	 * 动态的属性 跟对象走
	 */
	private  /*static*/ int  ticket =100;

	@Override
	public void run() {
		/**
		 * 可能1个窗口卖100张票  其他的窗口一张票都没卖  
		 */
		for(int index =1; index<=100;index++){
			
			//synchronized (this) {
				sellTicket();
			//}
			
		}
		
	}

	/**
	 * 
	 * synchronized 这把锁加载类上 还是加在对象上?
	 * 
	 * 答：加在对象上
	 * 
	 * 凡事能用synchronized方法能搞定的 用同步代码块 可以搞定  反过来不行
	 */
	private synchronized void sellTicket() {
		if (ticket >= 1) {
			try {
				System.out.println(Thread.currentThread().getName() + "开始买票：");
				Thread.currentThread().sleep(10);
				System.out.println(Thread.currentThread().getName() + "票号=" + ticket--);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}
